﻿#include "ScqList.h"

//读取文件:联系人信息
void LoadContact(Contact* pcon) {
	FILE* pf = fopen("contact.txt", "rb");
	if (pf == NULL) {
		perror("fopen error!\n");
		return;
	}
	//循环读取⽂件数据
	Info info;
	while (fread(&info, sizeof(info), 1, pf))
	{
		SLPushBack(pcon, info);
	}
}

//写入文件：联系人信息
void ContactSave(Contact* pcon) {
	FILE* pf = fopen("contact.txt", "wb");
	if (pf == NULL) {
		perror("fopen error!\n");
		return;
	}
	//将通讯录数据写⼊⽂件
	for (int i = 0; i < pcon->size; i++)
	{
		fwrite(pcon->arr + i, sizeof(Info), 1, pf);
	}
	printf("通讯录数据保存成功！\n");
}

//通讯录的初始化和销毁
void ContactInit(Contact* pcon) {
	SLInit(pcon);
	LoadContact(pcon);
}

void ContactDesTroy(Contact* pcon) {
	ContactSave(pcon);
	SLDesTroy(pcon);
}

//增加，删除，修改，查找，查看通讯录
void ContactAdd(Contact* pcon) {
	Info info;

	//让用户手动输入
	printf("请输入联系人姓名：");
	scanf("%s", info.name);
	printf("请输入联系人年龄：");
	scanf("%d", &info.age);
	printf("请输入联系人性别：");
	scanf("%s", info.gender);
	printf("请输入联系人电话：");
	scanf("%s", info.tel);
	printf("请输入联系人地址：");
	scanf("%s", info.addr);

	//自己选择插入方式
	SLPushBack(pcon, info);
}

//按照姓名 - 公共查找函数
int FindByName(Contact* pcon, char name[]) {
	for (int i = 0; i < pcon->size; i++)
	{
		if (strcmp(pcon->arr[i].name, name) == 0) {
			return i;
		}
	}
	return -1;
}

void ContactDel(Contact* pcon) {
	//删除之前必须先查找要删除的数据是否存在
	//不存在，不执行删除
	//存在，执行删除

	char name[NAME_MAX];
	printf("请输入要删除联系人姓名：");
	scanf("%s", name);

	int findIndex = FindByName(pcon, name);//按名字查找方式 - 公共函数
	if (findIndex < 0) {
		printf("您删除的联系人不存在！");
		return;
	}

	//存在，调用方式删除
	SLErase(pcon, findIndex);
	printf("联系人删除成功！\n");
}

void ContactModify(Contact* pcon) {
	char name[NAME_MAX];
	printf("请输入要修改联系人姓名：");
	scanf("%s", name);

	int findIndex = FindByName(pcon, name);//按名字查找方式 - 公共函数
	if (findIndex < 0) {
		printf("您修改的联系人不存在！");
		return;
	}

	//存在，执行修改
	printf("请输入修改联系人姓名：");
	scanf("%s", pcon->arr[findIndex].name);
	printf("请输入修改联系人年龄：");
	scanf("%d", &pcon->arr[findIndex].age);
	printf("请输入修改联系人性别：");
	scanf("%s", pcon->arr[findIndex].gender);
	printf("请输入修改联系人电话：");
	scanf("%s", pcon->arr[findIndex].tel);
	printf("请输入修改联系人地址：");
	scanf("%s", pcon->arr[findIndex].addr);

	printf("联系人修改成功! \n");
}

void ContactFind(Contact* pcon) {
	//按照用户输入的名字查找联系人数据
	//数据不存在，不执行
	//数据存在，打印该联系人数据

	char name[NAME_MAX];
	printf("请输入要查找联系人姓名：");
	scanf("%s", name);

	int findIndex = FindByName(pcon, name);//按名字查找方式 - 公共函数
	if (findIndex < 0) {
		printf("您查找的联系人不存在！");
		return;
	}

	//数据存在打印该联系人数据
	printf("姓名：%s 年龄：%d 性别：%s 电话：%s 地址：%s\n",//格式优化
		pcon->arr[findIndex].name,
		pcon->arr[findIndex].age,
		pcon->arr[findIndex].gender,
		pcon->arr[findIndex].tel,
		pcon->arr[findIndex].addr
	);
}

void ContactShow(Contact* pcon) {
	//查看通讯录就是（遍历数组）

	for (int i = 0; i < pcon->size; i++)
	{
		printf("姓名：%s 年龄：%d 性别：%s 电话：%s 地址：%s\n",//格式优化
			pcon->arr[i].name,
			pcon->arr[i].age,
			pcon->arr[i].gender,
			pcon->arr[i].tel,
			pcon->arr[i].addr
		);
	}
}